/***
 * 设计一个函数 funcA，可以对其他任意函数 funcX 进行处理，并满足：
 funcA(funxX)(x1)(x2)(x3)()的结果等同于funcX(x1, x2, x3) ，funcX可以为任意函数，且参数数量不固定。
 设计一个函数 funcB，可以对其他任意函数进行处理，并满足：
 Obj.funcX(x1, x2, x3)的结果等同于 funcB(Obj.funcX)(Obj, x1, x2, x3) 。
 请写出 funcA 和 funcB 的实现代码。
 */

funcA = function (f) {
    var self = arguments.callee.prototype;
    if (typeof f === 'function') {
        self.fn = f;
        self.args = [];
        return funcA;
    } else if ((typeof f !== 'function') && (arguments.length === 1)) {
        self.args.push(f);
        return funcA;
    }
    if (arguments.length === 0) {
        return self.fn.apply(this, self.args)
    }
};
funcA.prototype = {
    fn: '',
    args: []
};

funcB = function (f) {
    var fn;
    if (typeof f === 'function') {
        fn = f;
    }
    return function () {
        var arg = Array.prototype.slice.call(arguments, 1);
        var self = Array.prototype.slice.call(arguments, 0, 1);
        fn.apply(self[0], arg)
    }
};